package com.demo.TimeTask;

import org.springframework.scheduling.annotation.Scheduled;

import java.util.Date;

/**
 * @Author zqc
 * @Date 2020/9/29-13:59
 * @Description 定时任务类
 * 任务的类上写：
 * @Component           加入IOC容器
 * @Configuration       设置为配置类
 * @EnableScheduling    开启定时任务
 *
 * 任务方法上写@Scheduled
 */
//@Component
//@Configuration
//@EnableScheduling
public class Jobs {

    /**
     * 单位是毫秒
     * fixedRate是每多次分钟一次，不论业务执行花费了多少时间，都是1分钟执行1次，
     * fixedDelay是当任务执行完毕后1分钟在执行
     */
    //表示方法执行完成后5000毫秒
    @Scheduled(fixedDelay = 5000)
    public void fixedDelayJob() throws InterruptedException {
        System.out.println("fixedDelay 每隔5秒" + new Date());
    }

    //表示每隔3000毫秒
    @Scheduled(fixedRate = 3000)
    public void fixedRateJob() {
        System.out.println("fixedRate 每隔3秒" + new Date());
    }

    /**
     * cron生成器： https://www.matools.com/cron
     * cron 共7位，  秒 分 时 日 月 星期 年
     * 第一位，表示秒，取值0-59
     * 第二位，表示分，取值0-59
     * 第三位，表示小时，取值0-23
     * 第四位，日期天/日，取值1-31
     * 第五位，日期月份，取值1-12
     * 第六位，星期，取值1-7，星期天，星期一...，注：不是第一周，第二周的意思；另外：1表示星期天，2表示星期一
     * 第七位，年份，可以留空，取值1970-2099
     *
     * (*)星号：可以理解为每的意思，每秒，每分，每天，每月，每年...
     * (?)问号：问号只能出现在日期和星期这两个位置。
     * (-)减号：表达一个范围，如在小时字段中使用“10-12”，则表示从10到12点，即10,11,12
     * (,)逗号：表达一个列表值，如在星期字段中使用“1,2,4”，则表示星期一，星期二，星期四
     * (/)斜杠：如：x/y，x是开始值，y是步长，比如在第一位（秒） 0/15就是，从0秒开始，每15秒，最后就是0，15，30，45，60
     */
    //每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
    @Scheduled(cron = "0 0/5 14,18 * * ?")
    public void cronJob() {
        System.out.println("每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发："+new Date());
    }

    //每天下午2点到下午2:55期间的每5分钟触发
    @Scheduled(cron = "0 0/5 14 * * ?")
    public void cronJobOneHour() {
        System.out.println("每天下午2点到下午2:55期间的每5分钟触发："+new Date());
    }

    //表示每5分钟执行一次，是整点的5分钟，不是程序启动后开始计算的每5分钟
    @Scheduled(cron = "0 0/5 * * * ?")
    public void cronJob5Minutes() {
        System.out.println("每5分钟执行一次："+new Date());
    }

}
